#第一章第4节预训练模型
import os # 导入os库用于设置环境变量
import locale # 用于设置系统区域环境
import torch # 导入PyTorch库
from torchvision import models#  # 导入torchvision中的预训练模型
import certifi#  # 用于解决SSL证书问题 这里需要提前下载certifi包 pip install certifi


# 设置系统区域环境
os.environ['PYTHONIOENCODING'] = 'utf-8' # 设置Python输入输出编码为UTF-8
os.environ['LC_ALL'] = 'zh_CN.UTF-8' # 设置中文环境，以便解决中文路径问题，作用在系统环境变量（底层）。
os.environ['SSL_CERT_FILE'] = certifi.where()# 解决SSL证书问题
# 应用设置中文环境（通常是OS包和locale包一起使用）
locale.setlocale(locale.LC_ALL, 'zh_CN.UTF-8')# 设置中文环境，作用在Python 解释器（上层）。

# 1. 加载预训练ResNet50模型
model = models.resnet50(pretrained=True)  # 传统方式加载预训练模型（torchvision 0.13.0 及以下版本）
# Pytorch 1.10.0以上的版本有新的模型加载方式
#model = models.resnet50(pretrained=False)  # pretrained=False表示不加载预训练权重,只加载模型结构
#model = models.resnet50(weights='IMAGENET1K_V1')  # 使用新的加载方式(torchvision 0.13.0 及以上版本)
#model = models.alexnet(pretrained=True) # 可以调用其他模型，如AlexNet
# 2. 打印模型结构（验证加载成功）
print("ResNet50模型结构:")
print(model)  # 打印模型摘要

# 3. 创建随机输入数据（模拟单张224x224 RGB图像）
dummy_input = torch.randn(1, 3, 224, 224)  # [batch, channels, height, width]

# 4. 执行前向传播（验证模型正常工作）
output = model(dummy_input)

# 5. 验证输出结果
print("\n验证结果:")
print(f"输出张量形状: {output.shape}")  # 应为 torch.Size([1, 1000])
print("输出结果：\n",output)
print(f"输出值范围: {torch.min(output).item():.3f} 到 {torch.max(output).item():.3f}")